Distributed file systems offer many compelling advantages in establishing high performance computing environments. For example, they can provide storage for millions of files and provide simultaneous access by many disparate users. When many different users have access to a file system, there is a need to track changes made to files by one user or a group of users that could impact a second set of users. One way to accomplish this is to provide the ability to set up listeners that track changes to target files and/or target directories, and upon a detected triggering event, send a notice to a user or a group of users that the triggering event has occurred to the target.
As a means to provide notification to users when a triggering event occurs, a list of user or automated established listeners can be stored in a listener index. However, in a distributed file system, synchronizing changes within the listener index between distributed blades or nodes of the distributed file system can present challenges. For example, when a listener is created, all nodes within a distributed file system environment may need to update a listener index to reflect the newly created listener. Without synchronization of the listener index, a triggering event may be missed while the listener is still within the process of being registered on every node. Another similar problem may arise when a set of listeners change in the middle of a file system operation that triggers multiple listener events. In this case, a subscriber to the listener may receive notice that only some of the set of listener subscribed events were triggered. Thus, the user could have extreme difficulty in determining which listeners in the listener index were honored for a file system operation. Thus, it is desirable that users should have confidence that either every listener event in a newly registered set of listeners is honored or none of the listener events in the newly registered set of listeners were honored.
One method for providing a consistent experience would be to provide isolation between processing a file system operation that triggers events and processing a listener event changes by the means of a single distributed lock of the entire file system. In this sense, a consistent outcome is provided to a user. However, distributed file system locks may create delays or bottlenecks for other activity within the file system. Thus, in managing interactions between nodes of a distributed file system, there exists a need to provide a consistent experience to end users for tracked changes that also does not necessitate a distributed file system lock or other locking means that can create lengthy delays or bottlenecks for general file system activity.